//package com.kira.scaffoldmvc.CommonPool;
//
//import com.kira.scaffoldmvc.Mapper.ds1.RtaLogMapper;
//import com.lmax.disruptor.EventFactory;
//import com.lmax.disruptor.dsl.Disruptor;
//import com.lmax.disruptor.util.DaemonThreadFactory;
//import jakarta.annotation.Resource;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.context.annotation.Bean;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.CopyOnWriteArrayList;
//
//@Component
//@Slf4j
//public class DisruptorInit {
//
//    @Resource
//    private RtaLogMapper logMapper;
//
//    // 使用线程安全的列表（避免多线程并发修改）
//    private final List<RtaLog> batchList = new CopyOnWriteArrayList<>();
//    private static final int BATCH_SIZE = 10;
//
//    @Bean
//    public Disruptor<LogEvent> logEventDisruptor(){
//        //事件工厂-用于创建 DataRecordEvent 实例
//        EventFactory<LogEvent> factory = LogEvent::new;
//        //环形缓冲区大小（必须是2的幂）
//        Integer buffsize = 1024;
//
//        //构建Disruptor
//        Disruptor<LogEvent> disruptor = new Disruptor<>(
//                factory,    // 事件工厂
//                buffsize,                   // 环形缓冲区大小）
//                DaemonThreadFactory.INSTANCE
//        );
//
//        // 设置事件处理器
//        disruptor.handleEventsWith((event, sequence, endOfBatch) -> {
//            // 从事件中获取 RtaLog 对象
//            RtaLog rtaLog = event.getRtaLog();
//            //加入List
//            batchList.add(rtaLog);
//            log.info("日志入队,当前队列日志数量为:{}",batchList.size());
//            // 达到批量大小或批次结束时写入数据库
//            //if (batchList.size() >= BATCH_SIZE || endOfBatch),endOfBatch表示是否为最后一个事件,如果是最后一个事件则执行
//            if (batchList.size() >= BATCH_SIZE) {
//                // 复制当前批次的日志列表，避免在插入过程中被修改
//                List<RtaLog> logsToInsert = new ArrayList<>(batchList);
//                try {
//                    if (!logsToInsert.isEmpty()) {
//                        logMapper.insertBatch(logsToInsert); // 批量插入
//                    }
//                } finally {
//                    // 无论插入成功与否，都清空原始列表
//                    batchList.clear();
//                }
//            }
//
//        });
//
//        return disruptor;
//    }
//
//
//}
